package com.ssl.basics.list;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 描述：
 *
 * @author shi_senlin
 * @create 2021/07/09 20:44
 */
public class ListSafe {
    public static void main(String[] args) {
        // 1、Vector内部是通过Synchorized来加锁保证线程安全
        //List<String> list = new Vector<>();
        // 2、CopyOnWriteArrayList：写时复制容器，实现原理是：当添加元素时，先复制容器到一个新的容器，然后将要写
        // 的元素放到新的容器中，添加完成之后，再将原容器的引用指向新的容器。好处是可以并发的读，而不用加锁，因为当前
        // 容器不会添加任何元素。
        // List<String> list = new CopyOnWriteArrayList<>();
        // 3、synchronizedList
        List<String> list = Collections.synchronizedList(new ArrayList<>());
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                list.add(UUID.randomUUID().toString());
                System.out.println(list);
            }, "A").start();
        }
    }
}
